// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')
// 导入配置文件
const config = require('../config')
const db = require('../db/index')
const bcrypt = require('bcryptjs')




// 注册用户的处理函数
// exports.regUser = (req, res) => {
//     let user = req.body
//     const sql = `select * from user where account=?`
//     const sql2 = 'insert into user set ?'
//     db.query(sql, [user.account], function (err, results) {
//         // 执行 SQL 语句失败
//         if (err) {
//             return res.send({ status: 1, message: err.message })
//         }
//         // 用户名被占用
//         if (results.length > 0) {
//             return res.send({ status: 1, message: '账号被占用，请更换其他账号！' })
//         }
//         user.password = bcrypt.hashSync(user.password, 10)
//         db.query(sql2, { account: user.account, password: user.password }, function (err, results) {
//             // 执行 SQL 语句失败
//             if (err) return res.send({ status: 1, message: err.message })
//             // SQL 语句执行成功，但影响行数不为 1
//             if (results.affectedRows !== 1) {
//                 return res.send({ status: 1, message: '注册用户失败，请稍后再试！' })
//             }
//             // 注册成功
//             res.send({ status: 0, message: '注册成功！' })
//         })
//     })
// }

// 登录的处理函数
exports.loginAndRegister = (req, res) => {
    let user = req.body
    const sql = `select * from user where account=?`
    db.query(sql, user.account, function (err, results) {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 执行 SQL 语句成功，但是查询到数据条数不等于 1
        if (results.length > 1) return res.cc('登录失败！')
        //如果没有查询到结果，则自动为其注册一个新账号
        if(results.length===0){
            user.password = bcrypt.hashSync(user.password, 10)
            const sql2 = `insert into user (account,password) values (?,?)`
            db.query(sql2, [user.account,user.password], function (err, results) {
                // 执行 SQL 语句失败
                if (err) return res.send({ status: 1, message: err.message })
                // SQL 语句执行成功，但影响行数不为 1
                if (results.affectedRows !== 1) {
                    return res.send({ status: 1, message: '注册用户失败，请稍后再试！' })
                }
                // 注册成功
                const userInfo = { ...user, password: '' }
                // 生成 Token 字符串
                const tokenStr = jwt.sign(userInfo, config.jwtSecretKey, {
                    expiresIn: '10h', // token 有效期为 10 个小时
                })
                res.send({
                    status: 0,
                    message: '注册成功！',
                    // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                    token: 'Bearer ' + tokenStr,
                })
            })
        }
        if(results.length===1){
            const compareResult = bcrypt.compareSync(user.password, results[0].password)
            // 如果对比的结果等于 false, 则证明用户输入的密码错误
            if (!compareResult) {
                return res.cc('登录失败！')
            }

            const userInfo = { ...results[0], password: '' }
            // 生成 Token 字符串
            const tokenStr = jwt.sign(userInfo, config.jwtSecretKey, {
                expiresIn: '10h', // token 有效期为 10 个小时
            })
            res.send({
                status: 0,
                message: '登录成功！',
                // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
                token: 'Bearer ' + tokenStr,
            })
        }
    })

}